Objetivos:
- Utilizar sandboxes para testear
- Reglas YARA para detectar patrones maliciosos
- Técnicas de evasión de malware
- Implementar una técnica de evasión para evitar las reglas de detección YARA
Herramientas y conocimientos:
- Malware
- YARA
Sandbox
Un sandbox es un entorno aislado generalmente usado para probar el comportamiento de código malicioso, sin afectar al sistema. Usualmente se instalan además algunas herramientas para monitorear el comportamiento.
Para detectar si un entorno es de sandbox, lo más común es primero verificar si existe la carpeta C:\Program Files que no está presente en la mayoría de los entornos de sandbox.
En C se vería de esta forma:
void registryCheck() {
const char *registryPath = "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion";
const char *valueName = "ProgramFilesDir";
// Prepare the command string for reg.exe
char command[512];
snprintf(command, sizeof(command), "reg query \"%s\" /v %s", registryPath, valueName);
// Run the command
int result = system(command);
// Check for successful execution
if (result == 0) {
printf("Registry query executed successfully.\n");
} else {
fprintf(stderr, "Failed to execute registry query.\n");
}
}
int main() {
const char *flag = "[REDACTED]";
registryCheck();
return 0;
}
Básicamente utiliza la ruta del registro, busca el valor, revisa si fue exitoso y retorna la respuesta si es verdadera.
YARA
Herramienta usada para identificar y clasificar malware basado en patrones de código. Se pueden buscar cadenas específicas, headers, patrones de comportamiento, etc.
Por ejemplo:
rule SANDBOXDETECTED
{
meta:
description = "Detects the sandbox by querying the registry key for Program Path"
author = "TryHackMe"
date = "2024-10-08"
version = "1.1"
strings:
$cmd= "Software\\Microsoft\\Windows\\CurrentVersion\" /v ProgramFilesDir" nocase
condition:
$cmd
}
Es una regla que busca en el $cmd si es que se está buscando la cadena donde está el registro. De forma que si se detecta un True Positive, hace un log de ello.
Pruebas
Vamos a ejecutar powershell, dirigirnos a C:\Tools y correr el comando: \JingleBells.ps1, esto se mantendrá ejecutado y va a monitorear los event logs. Alertará si encuentra que se buscó la cadena anterior.

Ejecutaremos un malware preconfigurado:
C:\Tools\Malware\MerryChristmas.exe.
Si todo sale bien, saltará el EDR (Endpoint detection and response) y nos dará la bandera de la pregunta 1.

Ahora, podríamos ofuscar el comando del malware, de modo que técnicamente nos saltaríamos la regla YARA.
Por ejemplo la línea:
const char *registryPath = "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion";
const char *valueName = "ProgramFilesDir";
Podríamos codificarla en base64:
const char *encodedCommand = "RwBlAHQALQBJAHQAZQBtAFAAcgBvAHAAZQByAHQAeQAgAC0AUABhAHQAaAAgACIASABLAEwATQA6AFwAUwBvAGYAdAB3AGEAcgBlAFwATQBpAGMAcgBvAHMAbwBmAHQAXABXAGkAbgBkAG8AdwBzAFwAQwB1AHIAcgBlAG4AdABWAGUAcgBzAGkAbwBuACIAIAAtAE4AYQBtAGUAIABQAHIAbwBnAHIAYQBtAEYAaQBsAGUAcwBEAGkAcgA=";

Floss
Floss es una herramienta que extrae y decodifica cadenas, especializado en malwares.
Para usarlo:
PS C:\Tools\FLOSS> floss.exe C:\Tools\Malware\MerryChristmas.exe |Out-file C:\tools\malstrings.txt
El comando hace lo siguiente:
floss.exe C:\Tools\Malware\MerryChristmas.exeEscanea las strings.|pipe similar al de linux para redirigir el outputOut-file C:\tools\malstrings.txtindica donde guardar el resultado
Con esto obtenemos lo siguiente:

La primera bandera

YARA rules en sysmon logs
Una regla yara usualmente buscará eventos con un id determinado. Podemos extraerlos de Sysmon de windows. Afortunadamente con el monitor EDR que levantamos con anterioridad, ya tenemos el ID que necesitamos:

Iremos al windows event viewer -> Apllications and services logs -> Microsoft -> Windows -> Sysmon -> Operational -> Filter Current Log

Vamos a la pestaña XML y editaremos manualmente:


ParentImagenos muestra que proceso padre ejecutó cmd.exe para ejecutar el chequeo de registro. Con eso podemos ver que fue el archivoC:\Tools\Malware\MerryChristmas.exe.ParentProcessIdyProcessIdnos sirven para seguir investigando. Podriamos revisar otros logs por eventos relacionadosUsernos ayuda a determinar qué privilegios se usaron para lanzar el comando decmd.exe. Se pudo haber creado una cuenta oculta para hacerlo.CommandLinequé comando se ejecutó, en detalle.UtcTimela hora y fecha en que ocurrió. Nos podría ayudar a saber en qué rango horario enfocar nuestra investigación.
Con todo este proceso hemos logrado obtener todas las respuestas como están detalladas más arriba :)

Procedamos al Advent of Cyber día 7